#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql/mysql.h>

#define SELECT_QUERY "select name from stu_info where id=%d"
int main(int argc, char *argv[])
{
    MYSQL mysql;
    MYSQL_RES *res;
    MYSQL_ROW row;
    char query_buf[100];
    int id;
    
    // 数据库名称
    const char *db = "student";
    if(argc != 2) 
    {
        printf("Argv error! Usage: mysql_select id\n");
        return 1;
    }

    // 初始化连接句柄
    mysql_init(&mysql);
    if(mysql_real_connect(&mysql, "localhost", "root", "Nj8845850*", db, 0, NULL, 0) == NULL)
    {
        printf("数据库连接错误！ %d: %s\n", mysql_errno(&mysql), mysql_error(&mysql));
        return 1;
    }
    printf("MySQL 连接成功！Connection id: %d\n", mysql.thread_id);

    // 拼接SQL语句
    id = atoi(argv[1]);
    sprintf(query_buf, SELECT_QUERY,id);
    printf("sql = %s\n", query_buf);

    if(mysql_query(&mysql, query_buf)!=0)
    {
        printf("查询数据错误！ %d: %s\n", mysql_errno(&mysql), mysql_error(&mysql));
        mysql_close(&mysql);
        return 1;
    }

    // 使用 mysql_store_result() 初始化结果集
    if((res = mysql_store_result(&mysql)) == NULL)
    {
        printf("MySQL store result error! %d:%s\n",mysql_errno(&mysql),mysql_error(&mysql));
        mysql_close(&mysql);
        return 1;
    }
    // 结果集中的列数
    printf("Number of fields returned: %d!\n", mysql_num_fields(res));
    // 逐行访问结果集中的记录
    while(row = mysql_fetch_row(res))
    {
        printf("The students id %d name is: %s\n",id,
                (((row[0] == NULL) && (!strlen(row[0]))) ? "NULL" : row[0]));
        printf("Query success");
    }
    mysql_free_result(res);
    mysql_close(&mysql);

    return 0;
}
